package com.Offer;

import java.util.LinkedHashMap;
import java.util.Scanner;

/*
    面试题50：第一次只出现一次的字符
    在一个字符串(1<=字符串长度<=10000，全部由字母组成)中找到第一 个只出现一次的字符,并返回它的位置
    测试用例：abaccdeff
 */
public class demo50 {

    public static void main(String[] args) {
        long startTime=System.currentTimeMillis();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        System.out.println(s.charAt(findFirst(s)));
        System.out.println(FirstNotRepeatingChar(s));
        long endTime=System.currentTimeMillis();
        System.out.println("程序运行时间： "+(endTime-startTime)+"ms");

    }

    //个人写的：数组组成简单的哈希表
    public static int findFirst(String s){
        if(s.length()<1 || s.length()>10000){
            return -1;
        }

        int[] arrs = new int[26];
        char[] arrs2 = s.toCharArray();
        for(char a : arrs2){
            arrs[a-'a']++;
        }
        for(int i = 0;i<arrs2.length;i++){
            if(arrs[i] == 1){
                return i;
            }
        }
        return -1;
    }

    //别人写的：LinkHashMap存储数据
    public static int FirstNotRepeatingChar(String str) {
        if (str == null || str.length() == 0) return -1;
        char[] c = str.toCharArray();
        LinkedHashMap<Character,Integer> hash=new LinkedHashMap<Character,Integer>();
        for(char item : c) {
            if(hash.containsKey(item))
                hash.put(item, hash.get(item)+1);
            else
                hash.put(item, 1);
        }
        for(int i = 0;i < str.length(); i++){
            if (hash.get(str.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }
}
